{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### Content under Creative Commons Attribution license CC-BY 4.0, code under BSD 3-Clause License © 2018  by D. Koehn, notebook style sheet by L.A. Barba, N.C. Clementi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<link href=\"https://fonts.googleapis.com/css?family=Merriweather:300,300i,400,400i,700,700i,900,900i\" rel='stylesheet' >\n",
       "<link href=\"https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,300i,400,400i,700,700i\" rel='stylesheet' >\n",
       "<link href='http://fonts.googleapis.com/css?family=Source+Code+Pro:300,400' rel='stylesheet' >\n",
       "<style>\n",
       "\n",
       "@font-face {\n",
       "    font-family: \"Computer Modern\";\n",
       "    src: url('http://mirrors.ctan.org/fonts/cm-unicode/fonts/otf/cmunss.otf');\n",
       "}\n",
       "\n",
       "\n",
       "#notebook_panel { /* main background */\n",
       "    background: rgb(245,245,245);\n",
       "}\n",
       "\n",
       "div.cell { /* set cell width */\n",
       "    width: 800px;\n",
       "}\n",
       "\n",
       "div #notebook { /* centre the content */\n",
       "    background: #fff; /* white background for content */\n",
       "    width: 1000px;\n",
       "    margin: auto;\n",
       "    padding-left: 0em;\n",
       "}\n",
       "\n",
       "#notebook li { /* More space between bullet points */\n",
       "margin-top:0.5em;\n",
       "}\n",
       "\n",
       "/* draw border around running cells */\n",
       "div.cell.border-box-sizing.code_cell.running { \n",
       "    border: 1px solid #111;\n",
       "}\n",
       "\n",
       "/* Put a solid color box around each cell and its output, visually linking them*/\n",
       "div.cell.code_cell {\n",
       "    background-color: rgb(256,256,256); \n",
       "    border-radius: 0px; \n",
       "    padding: 0.5em;\n",
       "    margin-left:1em;\n",
       "    margin-top: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "div.text_cell_render{\n",
       "    font-family: 'Source Sans Pro', sans-serif;\n",
       "    line-height: 140%;\n",
       "    font-size: 110%;\n",
       "    width:680px;\n",
       "    margin-left:auto;\n",
       "    margin-right:auto;\n",
       "}\n",
       "\n",
       "/* Formatting for header cells */\n",
       ".text_cell_render h1 {\n",
       "    font-family: 'Merriweather', serif;\n",
       "    font-style:regular;\n",
       "    font-weight: bold;    \n",
       "    font-size: 250%;\n",
       "    line-height: 100%;\n",
       "    color: #004065;\n",
       "    margin-bottom: 1em;\n",
       "    margin-top: 0.5em;\n",
       "    display: block;\n",
       "}\t\n",
       ".text_cell_render h2 {\n",
       "    font-family: 'Merriweather', serif;\n",
       "    font-weight: bold; \n",
       "    font-size: 180%;\n",
       "    line-height: 100%;\n",
       "    color: #0096d6;\n",
       "    margin-bottom: 0.5em;\n",
       "    margin-top: 0.5em;\n",
       "    display: block;\n",
       "}\t\n",
       "\n",
       ".text_cell_render h3 {\n",
       "    font-family: 'Merriweather', serif;\n",
       "\tfont-size: 150%;\n",
       "    margin-top:12px;\n",
       "    margin-bottom: 3px;\n",
       "    font-style: regular;\n",
       "    color: #008367;\n",
       "}\n",
       "\n",
       ".text_cell_render h4 {    /*Use this for captions*/\n",
       "    font-family: 'Merriweather', serif;\n",
       "    font-weight: 300; \n",
       "    font-size: 100%;\n",
       "    line-height: 120%;\n",
       "    text-align: left;\n",
       "    width:500px;\n",
       "    margin-top: 1em;\n",
       "    margin-bottom: 2em;\n",
       "    margin-left: 80pt;\n",
       "    font-style: regular;\n",
       "}\n",
       "\n",
       ".text_cell_render h5 {  /*Use this for small titles*/\n",
       "    font-family: 'Source Sans Pro', sans-serif;\n",
       "    font-weight: regular;\n",
       "    font-size: 130%;\n",
       "    color: #e31937;\n",
       "    font-style: italic;\n",
       "    margin-bottom: .5em;\n",
       "    margin-top: 1em;\n",
       "    display: block;\n",
       "}\n",
       "\n",
       ".text_cell_render h6 { /*use this for copyright note*/\n",
       "    font-family: 'Source Code Pro', sans-serif;\n",
       "    font-weight: 300;\n",
       "    font-size: 9pt;\n",
       "    line-height: 100%;\n",
       "    color: grey;\n",
       "    margin-bottom: 1px;\n",
       "    margin-top: 1px;\n",
       "}\n",
       "\n",
       "    .CodeMirror{\n",
       "            font-family: \"Source Code Pro\";\n",
       "\t\t\tfont-size: 90%;\n",
       "    }\n",
       "/*    .prompt{\n",
       "        display: None;\n",
       "    }*/\n",
       "\t\n",
       "    \n",
       "    .warning{\n",
       "        color: rgb( 240, 20, 20 )\n",
       "        }  \n",
       "</style>\n",
       "<script>\n",
       "    MathJax.Hub.Config({\n",
       "                        TeX: {\n",
       "                           extensions: [\"AMSmath.js\"], \n",
       "                           equationNumbers: { autoNumber: \"AMS\", useLabelIds: true}\n",
       "                           },\n",
       "                tex2jax: {\n",
       "                    inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ],\n",
       "                    displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ]\n",
       "                },\n",
       "                displayAlign: 'center', // Change this to 'center' to center equations.\n",
       "                \"HTML-CSS\": {\n",
       "                    styles: {'.MathJax_Display': {\"margin\": 4}}\n",
       "                }\n",
       "        });\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Execute this cell to load the notebook's style sheet, then ignore it\n",
    "from IPython.core.display import HTML\n",
    "css_file = '../style/custom.css'\n",
    "HTML(open(css_file, \"r\").read())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "code_folding": [
     0
    ]
   },
   "outputs": [],
   "source": [
    "# Import Libraries \n",
    "# ----------------\n",
    "import numpy as np\n",
    "from numba import jit\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "from pylab import rcParams\n",
    "\n",
    "# Ignore Warning Messages\n",
    "# -----------------------\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "from mpl_toolkits.axes_grid1 import make_axes_locatable"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Viscoelastic stress-strain relations\n",
    "\n",
    "We compare different visco-elastic stress-strain relations in the frequency-domain to achieve a constant Q(ω) behavior. \n",
    "\n",
    "## 1D isotropic SH problem: linear elastic vs. viscoelastic medium\n",
    "\n",
    "To understand the difference between the linear elastic and visco-elastic 1D SH problem, we first review the partial differential equations of the 1D elastic SH problem. These consist of the conservation of momentum:\n",
    "\n",
    "\\begin{equation}\n",
    "\\rho \\frac{\\partial^2 u_y}{\\partial t^2} = \\frac{\\partial \\sigma_{yx}}{\\partial x} + f_y\\notag\n",
    "\\end{equation}\n",
    "\n",
    "To describe the deformation $\\epsilon_{yx}$ within the medium as a response to a given shear stress $\\sigma_{yx}$, we use the linear stress-strain relation:\n",
    "\n",
    "\\begin{equation}\n",
    "\\sigma_{yx} = 2\\mu \\epsilon_{yx}\\notag\n",
    "\\end{equation}\n",
    "\n",
    "with the shear modulus $\\mu$. To simplify notation, I define \n",
    "\n",
    "\\begin{equation}\n",
    "\\mu' = 2\\mu\\notag\n",
    "\\end{equation}\n",
    "\n",
    "and \n",
    "\n",
    "\\begin{equation}\n",
    "\\mu = \\mu'\\notag\n",
    "\\end{equation}\n",
    "\n",
    "Furthermore, I replace:\n",
    "\n",
    "\\begin{align}\n",
    "\\sigma_{yx} &\\rightarrow \\sigma\\notag\\\\\n",
    "\\epsilon_{yx} &\\rightarrow \\epsilon\\notag\\\\\n",
    "\\end{align}\n",
    "\n",
    "yielding:\n",
    "\n",
    "\\begin{equation}\n",
    "\\sigma = \\mu \\epsilon\\notag\n",
    "\\end{equation}\n",
    "\n",
    "To describe a **linear viscoelastic medium**, we only have to modfiy the stress-strain relation, because the conservation of momentum is independent of the material behavior. The viscoelastic stress-strain relation can be described by the **Boltzmann superposition and causality principle**:\n",
    "\n",
    "\\begin{equation}\n",
    "\\sigma = \\int_{-\\infty}^{t}\\Psi(t-t')\\dot{\\epsilon}(t')dt'\\notag\n",
    "\\end{equation}\n",
    "\n",
    "with the **relaxation function $\\Psi$**. The relaxation function, together with the integral bounds impose causality. You can see that the viscoelastic medium has a \"fading\" memory incorporating the strain-rate history. By definition, we can rewrite the stress-strain relation as convolution of the relaxation function with the strain rate $\\dot{\\epsilon}$\n",
    "\n",
    "\\begin{equation}\n",
    "\\sigma = \\Psi*\\dot{\\epsilon}\\notag\n",
    "\\end{equation}\n",
    "\n",
    "Using the property of the convolution time-derivative:\n",
    "\n",
    "\\begin{equation}\n",
    "\\frac{\\partial}{\\partial t} (\\Psi*\\epsilon) = \\frac{\\partial \\Psi}{\\partial t} * \\epsilon = \\Psi * \\frac{\\partial \\epsilon}{\\partial t}\\notag\n",
    "\\end{equation}\n",
    "\n",
    "we can rewrite the stress-strain relation for the viscoelastic medium to\n",
    "\n",
    "\\begin{equation}\n",
    "\\sigma = \\dot{\\Psi}*\\epsilon\\notag\n",
    "\\end{equation}\n",
    "\n",
    "Let's compare the stress-strain relation of an elastic and visco-elastic medium, assuming harmonic changes of stress and strain. \n",
    "\n",
    "In the elastic case both changes are in phase:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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tpKOHTv6Xnvt1eD116xZQ9u2bZsuoCxLWrygmOOQtHgheTEnLV4o3JjffPPNZe7eqf6RgLsXzKOkpMQbY9q0aY1aP25Ji9ddMcchafG6Jy/mpMXrXrgxA7M8wxyiQ7IiIiIZUMIUERHJgBKmiIhIBgrqop8omzZtory8nPXr19c7duedd2bu3LkxRNU0khYvJCvmNm3a0K1bt1yHISIxKfiEWV5eTnFxMXvttRfBpBLprV69muLi4pgia7ykxQvJidndWb58OeXl5bkORURiUvCHZNevX0+HDh3qTZYiqcyMDh06ZHRkQkSah4JPmICSpTSIPjcihSWnCdPM7jOzpWb2fpp+M7NbzWyBmc02s0NT+saa2fzwMTa+qJteUVERAIsXL2bUqFE5jiZQVlbGSSedtM3rrVq1ijvvvHPL81y+p0mTJnHBBRcAcNddd/GnP/0pJ3GISPOQ6wpzEjCsjv7jCSbh7QmMB34PYGa7AFcTTErbH7jazNpnNdIYdO3alccffzyr29i8eXNWX79mwozjPWXivPPO48wzz8x1GCLSBNzhwQdhzpydYt1uThOmu08HVtQxZATwp/CGDDOAdmbWBRgKvODuK9x9JfACdSfeRFi4cCG9evUCguro5JNPZtiwYfTs2ZPLLrtsy7jnn3+egQMHcuihhzJ69GgqKioAuO666zjssMPo1asX48ePx8PJwQcPHsxPf/pTBg0axC233LLVNtesWcPZZ5/NYYcdRt++fXn66adrxfXPf/6TI444gr59+3LEEUcwb948AObMmUP//v3p06cPvXv3Zv78+UyYMIGPP/6YPn36cOmll271niorK7nkkks45JBD6N27N7fddlutbZ1wwglcdNFFHHXUURx44IHMnDmTk08+mZ49e3LVVVdtGffggw9u2fa5555LZWUlAH/84x/Zb7/9GDRoEK+99tqW8ddccw2//e1vt+yPWbNmAbBs2TKqb5c4adIkRo4cyXe+8x169OjB7bffzv/8z//Qt29fDj/8cFasqOujKiJxWLECTjkFzjgDfvWrAwl//cUi36+S3R34LOV5ediWrr0WMxtPUJ3SuXNnysrKturfeeedWb16dUbBVFZWZjx2W61evZqKigqqqqpYvXo169ev5+233+bVV1+ldevWlJSU8IMf/IAddtiBa6+9lieffJK2bdty8803c8MNNzBhwgTGjh3LRRddBMA555zD1KlTOemkk6isrGTp0qX89a9/3bKtatdeey0DBw7klltuYdWqVZSWljJgwADWrl3L5s2bWb16NbvvvjtTp06lZcuWTJs2jcsuu4wHH3yQW2+9lfHjx3PKKaewceNGKisrueqqq5g9ezavvvoqAIsWLdrynu655x7mz5/P9OnTadmyJStWrKi1P6uT/NSpU7nzzjsZPnw406dPp3379nzrW99i3LhxLFu2jIceeohnn32W7bffnosuuoh77rmHo48+mp///OdMnz6dnXbaiRNPPJHevXuzevVqNmzYwPbbb8/q1auprKxkzZo1W/a5u2/Z57Nnz+bvf/87GzZsoE+fPlx77bVMnz6dCRMmMHHiRM4///yt4l2/fj0VFRW1Plf5LGnxQvJiTlq8kIyYZ85sz003HcDy5a0BWLx4B849dxHnnPOvWLaf7wkz6qoKr6O9dqP7RGAiQL9+/Xzw4MFb9c+dO3fL1xiyeQ2HR0b3jeLiYoqKithuu+0oLi6mTZs2HHPMMVu+53fwwQezfPlyVq1axbx58xg2LCioN27cyMCBAykuLub555/n17/+NWvXrmXFihUceOCBFBcX06JFC84444zIr2uUlZXx7LPPcscdd2x5vZUrV7LjjjvSsmVLiouLWbVqFWeffTbz58/HzNi0aRPFxcUMGjSI66+/nuXLl2+pAteuXbvlPQBbvae///3vXHDBBbRv337Le67JzBg1ahTFxcVbquWePXsCsM8++7Bq1SpmzJjBu+++y9FHHw3AunXr6NatG3PmzKG0tJQePXoAcOqpp/LRRx9RXFxM69atad269Zb90bZtW4qLi9mwYQNmtmWfDxkyhK5duwLBH1OjR4+muLiYkpISZs+eXSvmNm3aUFRURM3PVT4rKytLVLyQvJiTFi/kd8xr18Lll8Ptt2/dfuKJi/nDH/akqGjPWOLI94RZDnRPed4NWBy2D67RXhZbVDFp3br1luUWLVqwefNm3J1jjz2Whx9+eKux69ev58c//jGzZs2ie/fuXHPNNVt95SHdHf3dnSeeeIL9999/q/Yvvvhiy/LPfvYzSktLefLJJ1m4cOGW/1SnnnoqAwYMYOrUqQwdOpR77rmHvffeO+37cfeMriytft/bbbfdVvtgu+2227IPxo4dyw033LDVek899VRGr9+yZUuqqqoAan0tpOb2UmPJ9vlfEalt1qzg8OuHH37T1qkT3HMP7LTTRxQVdY0tllxf9FOfKcCZ4dWyhwNfufsS4DngODNrH17sc1zY1uwdfvjhvPbaayxYsACAtWvX8tFHH235xd+xY0cqKioyvtBm6NCh3HbbbVsOhb799tu1xnz11VfsvntwxHvSpElb2j/55BP23ntvLrzwQoYPH76lAkt32Pq4447jrrvu2pJ4GnpOcMiQITz++OMsXbp0y+ssWrSIAQMGUFZWxvLly9m0aROPPfZY5Pp77bUXb775JkBeXJAkIrVt3gwXXACHH751shw+HN5/P/gZt1x/reRh4B/A/mZWbmY/NLPzzOy8cMgzwCfAAuBu4McA7r4C+AUwM3xcF7Y1invdj6+/Xl3vmHSPptKpUycmTZrE97//fXr37s3hhx/Ohx9+SLt27TjnnHM45JBDGDlyJIcddlhGr/ezn/2MTZs20bt3b3r16sXPfvazWmMuu+wyrrjiCo488sgtF9cAPPLII/Tq1Ys+ffrw4YcfcuaZZ9KhQweOPPJIevXqxaWXXrrV64wbN4499tiD3r17861vfYs///nPDdoHBx10EL/85S857rjj6N27N8ceeyxLliyhS5cuXHPNNQwcOJBjjjmGQw89NHL9Sy65hN///vccccQRLFu2rEExiEj23H47bL893HEHVP/Kads2qCqfegp23TU3cZk35W/zPNevXz+vvjqy2ty5cznwwAMzWj8pt22rlrR4IXkxz507ly+++CJvz/1EyedzVekkLeakxQv5EXNVFbRoUbt94EB44AHYZ5+t25siZjN70937ZTI23w/JiohIAXjhhehkCfDqq7WTZS4oYYqISE61bw/HHVe7/fzzg1Na6RJp3PL9KlkREWmm5s2DAw6I7lu8GLp0iTee+qjC5Jsvy4tsC31uRBrupJOik2W/fkFVmW/JElRh0qZNG5YvX64pvmSbVM+H2aZNm1yHIpIoK1ZAhw7RfbNmQUlJvPFsi4JPmN26daO8vJwvv/yy3rHr169P1C/IpMULyYq5TZs2dOvWjUWLFuU6FJFEuPpquO666L4kHLAp+IS5/fbbb7mVWn3Kysro27dvliNqOkmLF5IZs4jUbdMmaNUquu+xxyBPZjWsl85hiohI1jz6aPpkuXFjcpIlKGGKiEgWuAcTWpxySu2+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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Stress-stain relation for linear elastic medium\n",
    "# -----------------------------------------------\n",
    "t = np.arange(0.0,10.0)  # time (s)\n",
    "\n",
    "sigma0 = 1.0             # maximum stress (Pa)\n",
    "epsilon0 = 1.0           # maximum strain ()\n",
    "omega = 1.0              # Circular frequency (rad/s)\n",
    "\n",
    "# Calculate temporal changes of sigma and epsilon\n",
    "# -----------------------------------------------\n",
    "sigma = sigma0 * np.cos(omega*t)\n",
    "epsilon = epsilon0 * np.cos(omega*t)\n",
    "\n",
    "# Define figure size\n",
    "rcParams['figure.figsize'] = 7, 5\n",
    "\n",
    "# plot stress-strain relation\n",
    "plt.plot(epsilon, sigma, 'b-',lw=3,label=\"linear elastic medium\")\n",
    "plt.title('Stress-Strain relation')\n",
    "plt.xlabel('Strain []')\n",
    "plt.ylabel('Stress [Pa]')\n",
    "plt.legend()\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the viscoelastic case stress and strain are out of phase. As we will see later, the phase shift $\\phi$ can be related to the quality factor $Q$ by \n",
    "\n",
    "\\begin{equation}\n",
    "\\phi = \\arctan{\\frac{1}{Q}} \\notag\n",
    "\\end{equation}\n",
    "\n",
    "which leads to the viscoelastic stress-strain relation:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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+Npya89BRAbgeqfUqlWL+fPnZ9lepUqVHP9DzU9aWtoxfyY/iYmJJCUlkZ6eTmJiIsnJyXz//fcsWrSIcuXKERcXxy233EKFChV49NFH+fDDD6lUqRLPPfccY8aMYfjw4fTr14+hQ4cC0L9/f95//30uv/xyVJW///6bTz755Oi5Mlx++eVMmzaNPn36sHz5ck4++WQqVqzI4cOHKVOmDImJiYwZM4bVq1dTrlw59u7dS2JiIo888ggVKlQ42qPas2cPv/zyC/fffz8LFy6katWqdO/enWnTptG+fftca05LS+PAgQMkJiYyfPhwqlevTkpKCt27d6dz587UqVOH6dOns3LlSkSEvXv3UrVqVS6//HI6d+5M9+7dAfd40KFDh9i1axc9evTgrbfeIi4ujv3795Oamprlez548CA//PADy5cvp1q1arRo0YK+ffsyd+5cXn75ZZ555hmefPJJ7rjjDgYOHEj79u3ZvHkzV199NStWrGDEiBG0bduW4cOH89lnnzFx4sQsvxOJiYkcPHgwy3lTUlJITk4mMTERVeX444/niy++YPjw4fTt25cvvviCw4cP065dO2688cYcvx/Jyck5fncLIykpKaTHC7doqxeir+aiWG/FTZuo/cknnPj555TZvz/H9npTp/J1z56kejSqvqgHZqDRDppHe85G1YnARIA2bdroBRdckGX72rVrMx8HCOfgCg1Y3lGxsbFUrlyZUqVKERsbS/ny5bn44oupW7cuAGeeeSa7du1i7969rFu3js6dXYc6JSWF9u3bExsbyxdffMG4ceM4ePAgu3fvplWrVsTGxiIi3HTTTQEfe7jpppsYPXo0gwYN4uOPP+aGG24gNjaWcuXKUa5cOWJjY2nZsiW333473bt3p3v37lSuXJmFCxeSkJBw9JixsbF89NFHxMfHH338oW/fvixfvpzY2Nhca46JiaFSpUrExsYydepUJk6cSEpKCtu3b+ePP/6gbdu2VKxYkaFDh3LFFVdw5ZVXUrZsWcqUKUOFChWOnj/j/datW6lTpw4Z/54Dfc8VK1akbdu2NG7cGHC96q5duxIbG0vbtm1ZunQpsbGxLFiwgF9//fXo5zJ6xcuWLeO///0vsbGxXH/99VSrVo2YmJgsP4uKFStSunTpo21ly5alfPnyR/999OjRg9jYWOLi4khJSaFOnToAVKhQ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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Stress-stain relation for linear viscoelastic medium\n",
    "# ----------------------------------------------------\n",
    "t = np.arange(0.0,10.0,0.1)  # time (s)\n",
    "\n",
    "sigma0 = 1.0             # maximum stress (Pa)\n",
    "epsilon0 = 1.0           # maximum strain ()\n",
    "omega = 1.0              # Circular frequency (rad/s)\n",
    "\n",
    "# define phase shift of strain\n",
    "Q = 10                     # quality factor ()\n",
    "phi = np.arctan(1/Q)       # phase shift (rad)\n",
    "\n",
    "# Calculate temporal changes of sigma and epsilon\n",
    "# -----------------------------------------------\n",
    "sigma = sigma0 * np.cos(omega*t)\n",
    "epsilon = epsilon0 * np.cos(omega*t - phi)\n",
    "\n",
    "# Define figure size\n",
    "rcParams['figure.figsize'] = 7, 5\n",
    "\n",
    "# plot stress-strain relation\n",
    "plt.plot(epsilon, sigma, 'r-',lw=3,label=\"linear viscoelastic medium\") \n",
    "plt.title('Stress-Strain relation')\n",
    "plt.xlabel('Strain []')\n",
    "plt.ylabel('Stress [Pa]')\n",
    "plt.legend()\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The energy loss $\\Delta E$ for example via heat, is defined by the area within the [hysteresis loop](https://en.wikipedia.org/wiki/Hysteresis), so we can calculate $\\Delta E$ by:\n",
    "\n",
    "\\begin{equation}\n",
    "\\Delta E = \\oint \\sigma(\\epsilon') d\\epsilon' \\notag\n",
    "\\end{equation}\n",
    "\n",
    "Furthermore, we can distinguish two special cases of linear viscoelasticity:\n",
    "\n",
    "1. The case above is **irreversible (inelastic)**\n",
    "2. A **reversible (anelastic)** medium can recover its original state after removing the load\n",
    "\n",
    "## Viscoelastic models\n",
    "\n",
    "So far the details of the relaxation function are not defined. Therefore, the next step is to find a relaxation function with a frequency-independent $Q(\\omega)$-value. Similar to electrical networks, we can construct viscoelastic models composed of two basic elements.\n",
    "\n",
    "### Basic elements\n",
    "\n",
    "These basic elements are \n",
    "\n",
    "<img src=\"images/Hooke_Newton_model.png\" width=\"60%\">\n",
    "\n",
    "* The **Hooke element** (spring), representing the linear elastic medium\n",
    "\n",
    "\\begin{align}\n",
    "\\sigma_{Hooke} &= \\mu \\epsilon \\notag\\\\\n",
    "&\\text{or} \\notag\\\\\n",
    "\\epsilon_{Hooke} &= \\frac{\\sigma}{\\mu}\\notag\\\\\n",
    "\\end{align}\n",
    "\n",
    "* The **Newton element** (dashpot), representing the viscous damping part with the stress-strainrate relation: \n",
    "\n",
    "\\begin{align}\n",
    "\\sigma_{Newton} &= \\eta \\dot{\\epsilon} \\notag\\\\\n",
    "&\\text{or} \\notag\\\\\n",
    "\\dot{\\epsilon}_{Newton} &= \\frac{\\sigma}{\\eta}\\notag\\\\\n",
    "\\end{align}\n",
    "\n",
    "where $\\eta$ denotes the viscosity of the medium.\n",
    "\n",
    "### Maxwell-model\n",
    "\n",
    "To realize different viscoelastic media we can combine the basic elements in different networks. A serial connection of the Hooke with the Newton element yields the **Maxwell-model**:\n",
    "\n",
    "<img src=\"images/Maxwell_model.png\" width=\"70%\">\n",
    "\n",
    "In a serial connection, the effective deformation can be calculated by the sum of the basic element deformations\n",
    "\n",
    "\\begin{equation}\n",
    "\\epsilon = \\epsilon_1 + \\epsilon_2 \\notag\n",
    "\\end{equation}\n",
    "\n",
    "or by taking the time derivative\n",
    "\n",
    "\\begin{equation}\n",
    "\\dot{\\epsilon} = \\dot{\\epsilon}_1 + \\dot{\\epsilon}_2 \\notag\n",
    "\\end{equation}\n",
    "\n",
    "For the Maxwell-model we get the following ordinary differential equation for $\\epsilon$ and $\\sigma$\n",
    "\n",
    "\\begin{equation}\n",
    "\\dot{\\epsilon}_{M} = \\dot{\\epsilon}_{Newton} + \\dot{\\epsilon}_{Hooke} = \\frac{\\sigma}{\\eta} + \\frac{\\dot{\\sigma}}{\\mu}\\notag\n",
    "\\end{equation}\n",
    "\n",
    "We solve this problem by Fourier transform, where the wavefields in the frequency domain are defined as  \n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{f}(\\omega) = \\int_{-\\infty}^{\\infty} f(t) exp(-i\\omega t) dt\\notag\n",
    "\\end{equation}\n",
    "\n",
    "Time-derivatives are transformed according to:\n",
    "\n",
    "\\begin{equation}\n",
    "i \\omega \\tilde{f}(\\omega) = \\int_{-\\infty}^{\\infty} \\dot{f}(t) exp(-i\\omega t) dt\\notag\n",
    "\\end{equation}\n",
    "\n",
    "Therefore, the Maxwell-model in the frequency domain is:\n",
    "\n",
    "\\begin{equation}\n",
    "i \\omega \\tilde{\\epsilon}_{M} = \\frac{\\tilde{\\sigma}}{\\eta} + \\frac{i \\omega \\tilde{\\sigma}}{\\mu}\\notag\n",
    "\\end{equation}\n",
    "\n",
    "After some rearrangements, we get the stress-strain relation in the frequency domain\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\epsilon}_{M} = \\biggl(\\frac{1}{\\mu}+\\frac{1}{i \\omega \\eta}\\biggr) \\tilde{\\sigma}\\notag\n",
    "\\end{equation}\n",
    "\n",
    "where we can connect strain with stress via a complex shear modulus $\\tilde{\\mu}_M$:\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\epsilon}_{M} = \\tilde{\\mu_M} \\tilde{\\sigma}\\notag\n",
    "\\end{equation}\n",
    "\n",
    "with \n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\mu}_M = \\frac{1}{\\mu}+\\frac{1}{i \\omega \\eta}\\notag\n",
    "\\end{equation}\n",
    "\n",
    "For the application in seismic modelling, it is important that the visco-elastic model can describe a frequency-independent $Q(\\omega)$. This question can be quite easily answered, because we can connect the real and imaginary parts of the complex shear modulus $\\tilde{\\mu}_M$ for the Maxwell-model with the quality factor $Q$ by:\n",
    "\n",
    "\\begin{equation}\n",
    "\\frac{1}{Q} = \\frac{{\\frak{I}}\\{\\tilde{\\mu}_M\\}}{{\\frak{R}}\\{\\tilde{\\mu}_M\\}} = \\tan{\\phi},\\notag\n",
    "\\end{equation}\n",
    "\n",
    "which also explains why we could relate the phase angle $\\phi$ with $1/Q$, when we investigated the stress-strain relations for harmonic stress/strain above. So let's plot $1/Q$ as a function of $\\omega$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 1/Q(omega) for the Maxwell-model\n",
    "# --------------------------------\n",
    "f = np.arange(5.0,100.0,0.5)  # frequency (Hz)\n",
    "omega = 2 * np.pi * f\n",
    "\n",
    "mu = 4e8             # shear modulus (Pa) for soil from Dokter et al. (2017)\n",
    "eta = 1.0            # viscosity (Pa s)\n",
    "\n",
    "# Define complex shear modulus for Maxwell-model\n",
    "# ----------------------------------------------\n",
    "muM = (1/mu) + (1/(1j*omega*eta))\n",
    "\n",
    "# Calculate 1/Q(omega)\n",
    "# --------------------\n",
    "Qinv = np.abs(np.imag(muM)/np.real(muM))\n",
    "\n",
    "# Define figure size\n",
    "rcParams['figure.figsize'] = 7, 5\n",
    "\n",
    "# plot stress-strain relation\n",
    "plt.plot(f, Qinv, 'r-',lw=3,label=\"Maxwell-model\") \n",
    "plt.title(r'$\\frac{1}{Q}(\\omega)$ for the Maxwell-model')\n",
    "plt.xlabel('Frequency f [Hz]')\n",
    "plt.ylabel(r'$\\frac{1}{Q}$ []')\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As you can see, the Maxwell-model is not useful to model viscoelastic seismic wave propagation, because we have small damping at high frequencies."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Kelvin–Voigt model\n",
    "\n",
    "What happens if we connect the Hooke and Newton elements leading to the **Kelvin-Voigt model**?\n",
    "\n",
    "<img src=\"images/Kelvin_Voigt_model.png\" width=\"70%\">\n",
    "\n",
    "In a parallel connection of elements, the effective stress can be calculated by the sum of the basic element stresses\n",
    "\n",
    "\\begin{equation}\n",
    "\\sigma = \\sigma_1 + \\sigma_2 \\notag\n",
    "\\end{equation}\n",
    "\n",
    "For the Maxwell-model we have the stresses\n",
    "\n",
    "\\begin{align}\n",
    "\\sigma_{Hooke} &= \\mu \\epsilon\\notag \\\\\n",
    "\\sigma_{Newton} &= \\eta \\dot{\\epsilon}\\notag \\\\\n",
    "\\end{align}\n",
    "\n",
    "which yields the ordinary differential equation for the Kelvin-Voigt model\n",
    "\n",
    "\\begin{equation}\n",
    "\\sigma_{KV} = \\sigma_{Hooke} + \\sigma_{Newton} = \\mu \\epsilon + \\eta \\dot{\\epsilon} \\notag\n",
    "\\end{equation}\n",
    "\n",
    "After Fourier transform and some rearrangement we get\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\sigma}_{KV}(\\omega) = (\\mu + \\eta i \\omega)\\; \\tilde{\\epsilon}(\\omega) \\notag\n",
    "\\end{equation}\n",
    "\n",
    "where the complex shear modulus for the Kelvin-Voigt model\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\mu}_{KV} = (\\mu + \\eta i \\omega) \\notag\n",
    "\\end{equation}\n",
    "\n",
    "can be identified. Let's calculate the $1/Q(\\omega)$ behavior from real and imaginary part of the complex Kelvin-Voigt shear modulus:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 1/Q(omega) for the Kelvin-Voigt model\n",
    "# -------------------------------------\n",
    "f = np.arange(5.0,100.0,0.5)  # frequency (Hz)\n",
    "omega = 2 * np.pi * f\n",
    "\n",
    "mu = 4e8             # shear modulus (Pa) for soil from Dokter et al. (2017)\n",
    "eta = 1.0            # viscosity (Pa s)\n",
    "\n",
    "# Define complex shear modulus for Kelvin-Voigt model\n",
    "# ---------------------------------------------------\n",
    "muKV = mu + 1j * omega * eta\n",
    "\n",
    "# Calculate 1/Q(omega)\n",
    "# --------------------\n",
    "Qinv = np.imag(muKV)/np.real(muKV)\n",
    "\n",
    "# Define figure size\n",
    "rcParams['figure.figsize'] = 7, 5\n",
    "\n",
    "# plot stress-strain relation\n",
    "plt.plot(f, Qinv, 'r-',lw=3,label=\"Kelvin-Voigt model\") \n",
    "plt.title(r'$\\frac{1}{Q}(\\omega)$ for the Kelvin-Voigt model')\n",
    "plt.xlabel('Frequency f [Hz]')\n",
    "plt.ylabel(r'$\\frac{1}{Q}$ []')\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Unfortunately, the Kelvin-Voigt model is also not suitable to model viscoelastic wave propagation, because the damping increases linear with frequency."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "### Standard Linear Solid (SLS) - Maxwell\n",
    "\n",
    "Another idea to construct a viscoelastic model is to combine the Maxwell element with a Hooke element in parallel. This is denoted as **Standard Linear Solid (SLS) in Maxwell representation**\n",
    "\n",
    "<img src=\"images/SLS.png\" width=\"70%\">\n",
    "\n",
    "Because we have to combine elements in parallel, the stresses of components have to be added:\n",
    "\n",
    "\\begin{equation}\n",
    "\\sigma_{SLSM} = \\sigma_{Hooke} + \\sigma_{Maxwell} \\notag\n",
    "\\end{equation}\n",
    "\n",
    "For simplicity we will do this directly in the frequency domain:\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\sigma}_{SLSM} = \\tilde{\\sigma}_{Hooke} + \\tilde{\\sigma}_{Maxwell} \\notag\n",
    "\\end{equation}\n",
    "\n",
    "Inserting the stresses\n",
    "\n",
    "\\begin{align}\n",
    "\\tilde{\\sigma}_{Hooke} &= \\mu_0 \\tilde{\\epsilon}\\notag \\\\\n",
    "\\tilde{\\sigma}_{Maxwell} &= \\frac{i \\mu_1 \\omega \\eta}{i \\omega \\eta + \\mu_1} \\tilde{\\epsilon}\\notag \\\\\n",
    "\\end{align}\n",
    "\n",
    "yields the frequency-domain stress-strain relation for the SLS in Maxwell representation:\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\sigma}_{SLSM} = \\biggl(\\mu_0 + \\frac{i \\mu_1 \\omega \\eta}{i \\omega \\eta + \\mu_1}\\biggr) \\tilde{\\epsilon} \\notag\n",
    "\\end{equation}\n",
    "\n",
    "The complex SLS shear modulus $\\tilde{\\mu}_{SLSM}$ can be rewritten as\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\mu}_{SLSM} = \\mu_0 + \\frac{i \\mu_1 \\omega}{i \\omega + \\frac{\\mu_1}{\\eta}} \\notag\n",
    "\\end{equation}\n",
    "\n",
    "Notice that the quantity $\\frac{\\mu_1}{\\eta}$ has the dimension $\\left[\\frac{Pa}{Pa\\; s}\\right] = \\left[\\frac{1}{s}\\right]$ of a frequency. A more detailed analysis reveals that this is the **relaxation frequency**\n",
    "\n",
    "\\begin{equation}\n",
    "\\omega_1 :=\\frac{\\mu_1}{\\eta} \\notag\n",
    "\\end{equation}\n",
    "\n",
    "Therefore, we get:\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\mu}_{SLSM} = \\mu_0 + \\frac{i \\mu_1 \\omega}{i \\omega + \\omega_1} \\notag\n",
    "\\end{equation}\n",
    "\n",
    "How does the $1/Q(\\omega)$ frequency spectrum look like?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 1/Q(omega) for the Maxwell SLS\n",
    "# ------------------------------\n",
    "f = np.arange(5.0,100.0,0.5)  # frequency (Hz)\n",
    "omega = 2 * np.pi * f\n",
    "\n",
    "mu0 = 4e8             # shear modulus (Pa) for soil from Dokter et al. (2017)\n",
    "mu1 = 1               # shear modulus (Pa)\n",
    "\n",
    "f1 = 50.0\n",
    "omega1 = 2 * np.pi * f1\n",
    "\n",
    "# Define complex shear modulus for Kelvin-Voigt model\n",
    "# ---------------------------------------------------\n",
    "muSLSM = mu0 + (1j * mu1 * omega)/((1j * omega) + omega1)\n",
    "\n",
    "# Calculate 1/Q(omega)\n",
    "# --------------------\n",
    "Qinv = np.imag(muSLSM)/np.real(muSLSM)\n",
    "\n",
    "# Define figure size\n",
    "rcParams['figure.figsize'] = 7, 5\n",
    "\n",
    "# plot stress-strain relation\n",
    "plt.plot(f, Qinv, 'r-',lw=3,label=\"Maxwell SLS model\") \n",
    "plt.title(r'$\\frac{1}{Q}(\\omega)$ for Maxwell SLS model')\n",
    "plt.xlabel('Frequency f [Hz]')\n",
    "plt.ylabel(r'$\\frac{1}{Q}$ []')\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This result looks promising. While $1/Q$ is not frequency independent, we see for the Maxwell SLS model a peak at a given frequency and decreases at lower and higher frequencies. For completeness, I note that we could also build a **Kelvin-Voigt SLS model** by connecting a Hooke element with a Kelvin-Voigt element in parallel. However, in the following we will further focus on the potential of the Maxwell SLS model.\n",
    "\n",
    "## Generalized Maxwell-model\n",
    "\n",
    "Based on the promising results of the Maxwell SLS model, we add multiple Maxwell models in parallel, which yields the **Generalized Maxwell model or Generalized Maxwell body (GMB)**, also known as **Maxwell-Wiechert model**. By the superposition of multiple Maxwell models with different elastic modules $\\mu_l$ and viscosities $\\eta_l$, we can achieve a constant Q-value over a given frequency range.\n",
    "\n",
    "<img src=\"images/GMB.png\" width=\"70%\">\n",
    "\n",
    "Because we assemble the Maxwell SLS model with additional L Maxwell bodies in parallel, we have to add the stresses in frequency domain:\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\sigma}_{GMB} = \\tilde{\\sigma}_{SLSM} + \\sum_{l=2}^{L} \\tilde{\\sigma}_{Maxwell, l} \\notag\n",
    "\\end{equation}\n",
    "\n",
    "Inserting the stresses\n",
    "\n",
    "\\begin{align}\n",
    "\\tilde{\\sigma}_{SLSM} &= \\biggl(\\mu_0 + \\frac{i \\mu_1 \\omega \\eta_1}{i \\omega \\eta_1 + \\mu_1}\\biggr) \\tilde{\\epsilon} \\notag \\\\\n",
    "\\tilde{\\sigma}_{Maxwell, l} &= \\frac{i \\mu_l \\omega \\eta_l}{i \\omega \\eta_l + \\mu_l} \\tilde{\\epsilon}\\notag \\\\\n",
    "\\end{align}\n",
    "\n",
    "yields the frequency-domain stress-strain relation for the GMB\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\sigma}_{GMB} = \\biggl(\\mu_0 + \\frac{i \\mu_1 \\omega \\eta_1}{i \\omega \\eta_1 + \\mu_1} + \\sum_{l=2}^{L} \\frac{i \\mu_l \\omega \\eta_l}{i \\omega \\eta_l + \\mu_l}\\biggr) \\tilde{\\epsilon} \\notag\n",
    "\\end{equation}\n",
    "\n",
    "We can move the second term into the sum over the L Maxwell-models:\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\sigma}_{GMB} = \\biggl(\\mu_0 + \\sum_{l=1}^{L} \\frac{i \\mu_l \\omega \\eta_l}{i \\omega \\eta_l + \\mu_l}\\biggr) \\tilde{\\epsilon} \\notag\n",
    "\\end{equation}\n",
    "\n",
    "Introducing the **relaxation frequencies** \n",
    "\n",
    "\\begin{equation}\n",
    "\\omega_l :=\\frac{\\mu_1}{\\eta_l} \\notag\n",
    "\\end{equation}\n",
    "\n",
    "leads to\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\sigma}_{GMB} = \\biggl(\\mu_0 + \\sum_{l=1}^{L} \\frac{i \\mu_l \\omega}{i \\omega + \\omega_l}\\biggr) \\tilde{\\epsilon} \\notag\n",
    "\\end{equation}\n",
    "\n",
    "I want to simplify the complex modulus \n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\mu}_{GMB} = \\mu_0 + \\sum_{l=1}^{L} \\frac{i \\mu_l \\omega}{i \\omega + \\omega_l}. \\notag\n",
    "\\end{equation}\n",
    "\n",
    "First we estimate the relaxed shear modulus:\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\mu}_{GMB,R} = \\lim_{\\omega\\rightarrow 0} \\tilde{\\mu}_{GMB} = \\mu_0\\notag\n",
    "\\end{equation}\n",
    "\n",
    "and unrelaxed shear modulus:\n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\mu}_{GMB,U} = \\lim_{\\omega\\rightarrow \\infty} \\tilde{\\mu}_{GMB} = \\mu_0 + \\sum_{l=1}^{L} \\mu_l\\notag\n",
    "\\end{equation}\n",
    "\n",
    "With the **modulus defect** or **relaxation of modulus** \n",
    "\n",
    "\\begin{equation}\n",
    "\\delta \\mu = \\tilde{\\mu}_{GMB,U} - \\tilde{\\mu}_{GMB,R} = \\sum_{l=1}^{L} \\mu_l\\notag\n",
    "\\end{equation}\n",
    "\n",
    "we get\n",
    "\n",
    "\\begin{equation}\n",
    "\\delta \\mu_l = \\mu_l\\notag\n",
    "\\end{equation}\n",
    "\n",
    "Without any simplification we can consider\n",
    "\n",
    "\\begin{equation}\n",
    "\\delta \\mu_l = a_l \\delta \\mu\\notag\n",
    "\\end{equation}\n",
    "\n",
    "with the normalization\n",
    "\n",
    "\\begin{equation}\n",
    "\\sum_{l=1}^L a_l = 1\\notag\n",
    "\\end{equation}\n",
    "\n",
    "This yields \n",
    "\n",
    "\\begin{equation}\n",
    "\\tilde{\\mu}_{GMB} = \\mu_0 + \\delta \\mu \\sum_{l=1}^{L} \\frac{i a_l \\omega}{i \\omega + \\omega_l}. \\notag\n",
    "\\end{equation}\n",
    "\n",
    "Let's try to approximate a constant $Q(\\omega) = 10$ model for frequencies between 5 and 100 Hz by using 4 Maxwell bodies and setting all shear moduli of the Maxwell bodies to a constant value."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Q(omega) for the GMB with 4 Maxwell bodies\n",
    "# --------------------------------------------\n",
    "f = np.arange(5.0,100.0,0.5)  # frequency (Hz)\n",
    "nf = len(f)\n",
    "omega = 2 * np.pi * f\n",
    "\n",
    "# relaxation frequencies\n",
    "L = 4   # number of Maxwell bodies\n",
    "fl = np.linspace(5.0,100.0,L)\n",
    "omegal = 2. * np.pi * fl\n",
    "\n",
    "# Define relaxed shear modulus and defect for GMB\n",
    "mu0 = 4e8          # shear modulus (Pa) for soil from Dokter et al. (2017)\n",
    "dmu = 1.4e8        # shear moduli of Maxwell bodies (Pa)\n",
    "\n",
    "# Simply set a_l = 1.0 / L\n",
    "a_l = 1.0 / L \n",
    "\n",
    "# Define complex shear modulus for GMB model\n",
    "# ------------------------------------------\n",
    "muM = np.zeros(nf,dtype='complex128')\n",
    "for l in range(0,L):\n",
    "    muM += (1j * a_l * omega)/((1j * omega) + omegal[l])\n",
    "muGMB = mu0 + dmu * muM\n",
    "\n",
    "# Calculate Q(omega)\n",
    "# --------------------\n",
    "Q = np.real(muGMB)/np.imag(muGMB)\n",
    "\n",
    "# Define figure size\n",
    "rcParams['figure.figsize'] = 7, 5\n",
    "\n",
    "# plot stress-strain relation\n",
    "plt.plot(f, Q, 'r-',lw=3,label=\"General Maxwell model\") \n",
    "plt.title(r'$Q(\\omega)$ for General Maxwell model')\n",
    "plt.xlabel('Frequency f [Hz]')\n",
    "plt.ylabel(r'$Q$ []')\n",
    "plt.ylim(0,20)\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "While the result is not perfect, we could get an approximately constant $Q(\\omega)=10$  value for frequencies between 5 and 100 Hz. We will optimize this result in the next lesson."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## What we learned:\n",
    "\n",
    "- The viscoelastic stress-strain relation can be described by a time convolution of a relaxation function with the strain rate. The relaxation function together with the integral bounds impose a causality and \"fading\" memory of the viscoelastic medium\n",
    "- A low Q-model introduces a phase shift in the stress-strain relation. The area between the hysteresis loop defines the energy loss\n",
    "- By assembling multiple basic Hooke and Newton elements in a serial and/or parallel network, we can derive a complex shear modulus in the frequency domain and achieve a constant $Q(\\omega)$ behavior"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
